1 Introdução

A proposta da pesquisa é verificar em quais circunstância o soft power indireto gerado pelas nações surge como uma condição suficiente, ou parte de uma combinação causal suficiente, para garantir a proximidade entre a política de dois Estados, sendo essa medida com base nos padrões de votação na Assembleia Geral da ONU. Além das variáveis supracitadas, isto é, o soft power indireto (variável causal de interesse) e a proximidade política (variável de resultado), serão também consideradas como possíveis variáveis causais as relações econômicas e militares existentes entre os pares de Estados analisados, sendo a metodologia escolhida para este estudo a Análise Qualitativa Comparada, em sua vertente de valores difusos (fsQCA).

A pesquisa utilizará os pacotes tidyverse, para limpeza, organização e vizualização dos dados; plotly, para tornar interativos os gráficos criados com a função ggplot (inclusa no tidyverse); rjson, para a coleta de alguns dos dados que serão empregados; QCA, criado por Adrian Dusa (2019) com a finalidade explícita de realizar pesquisa empregando o método em questão; e veen, para visualizar o diagrama de Venn criado a partir da tabela verdade da pesquisa.

library(tidyverse)
library(plotly)
library(rjson)
library(QCA)
library(venn)

2 Coleta e limpeza dos dados

2.1 Proximidade política entre dois Estados

Conforme mencionado na introdução, para medir a proximidade política entre dois Estados serão utilizados os dados de votação na Assembleia Geral da ONU (AGNU), utilizados como padrão ouro em pesquisas dessa natureza por oferecerem dados mensuráveis e comparáveis ao longo dos anos. Esses dados já foram compilados pelos autores Voeten, Strezhnev, e Bailey (2009), estando disponíveis no repositório Harvard Dataverse.

O campo de código abaixo carrega a base de dados em questão no ambiente de trabalho:

load(url("https://dataverse.harvard.edu/api/access/datafile/4624865"))
head(dfAgree)
## # A tibble: 6 × 30
## # Groups:   session.x, ccode1 [1]
##   session.x ccode1 ccode2 agree  year   X.x NVotesAll.x IdealP…¹ QO.Al…² Q5.Al…³
##       <int>  <int>  <int> <dbl> <dbl> <int>       <int>    <dbl>   <dbl>   <dbl>
## 1         1      2     20 0.854  1946     1          42     1.71    1.08    1.40
## 2         1      2     40 0.712  1946     1          42     1.71    1.08    1.40
## 3         1      2     41 0.568  1946     1          42     1.71    1.08    1.40
## 4         1      2     42 0.732  1946     1          42     1.71    1.08    1.40
## 5         1      2     70 0.566  1946     1          42     1.71    1.08    1.40
## 6         1      2     90 0.682  1946     1          42     1.71    1.08    1.40
## # … with 20 more variables: Q10.All.x <dbl>, Q50.All.x <dbl>, Q90.All.x <dbl>,
## #   Q95.All.x <dbl>, Q100.All.x <dbl>, iso3c.x <chr>, Countryname.x <chr>,
## #   X.y <int>, NVotesAll.y <int>, IdealPointAll.y <dbl>, QO.All.y <dbl>,
## #   Q5.All.y <dbl>, Q10.All.y <dbl>, Q50.All.y <dbl>, Q90.All.y <dbl>,
## #   Q95.All.y <dbl>, Q100.All.y <dbl>, iso3c.y <chr>, Countryname.y <chr>,
## #   IdealPointDistance <dbl>, and abbreviated variable names ¹​IdealPointAll.x,
## #   ²​QO.All.x, ³​Q5.All.x

Nota-se nesse estágio que a pesquisa BBC/GlobeScan, utilizada aqui para medir o soft power dos Estados, envolveu apenas 10 países em suas duas dimensões - isto é, apenas indivíduos desses 10 países foram entrevistados para compor o índice e, simultaneamente, tiveram seu próprio país avaliado por audiências internacionais. Assim, são esses 10 Estados que serão utilizados como amostra para a pesquisa, recorrendo sempre a dados de 2017, ano no qual o índice BBC/GlobeScan foi elaborado.

Assim sendo, a base de dados sobre os padrões de votação na AGNU, tal qual todas que virão a seguir, podem ser filtradas para conter apenas as observações que serão relevantes para a análise. Igualmente, nem todas as variáveis contidas no banco de dados são relevantes, sendo possível filtrá-las.

countries <- c("BRA", "CAN", "CHN", "FRA", "DEU", "IND", "PAK", "RUS", "GBR", "USA")

un_data <- dfAgree %>%
  ungroup() %>%
  filter(year == 2017) %>%
  filter(iso3c.x %in% countries) %>%
  filter(iso3c.y %in% countries) %>%
  select(iso3c.x,
         iso3c.y,
         agree,
         IdealPointDistance)
head(un_data)
## # A tibble: 6 × 4
##   iso3c.x iso3c.y agree IdealPointDistance
##   <chr>   <chr>   <dbl>              <dbl>
## 1 USA     CAN     0.752              1.19 
## 2 USA     BRA     0.344              2.97 
## 3 USA     GBR     0.689              0.970
## 4 USA     FRA     0.667              1.11 
## 5 USA     DEU     0.638              1.46 
## 6 USA     RUS     0.362              2.55

Para concluir a limpeza, é relevante criar uma variável com as siglas dos dois Estados (DyadCode), facilitando a identificação futura de cada caso:

un_data$DyadCode <- paste(un_data$iso3c.x, un_data$iso3c.y, sep = "+")
head(un_data)
## # A tibble: 6 × 5
##   iso3c.x iso3c.y agree IdealPointDistance DyadCode
##   <chr>   <chr>   <dbl>              <dbl> <chr>   
## 1 USA     CAN     0.752              1.19  USA+CAN 
## 2 USA     BRA     0.344              2.97  USA+BRA 
## 3 USA     GBR     0.689              0.970 USA+GBR 
## 4 USA     FRA     0.667              1.11  USA+FRA 
## 5 USA     DEU     0.638              1.46  USA+DEU 
## 6 USA     RUS     0.362              2.55  USA+RUS

2.2 Soft Power

Para medir o soft power indireto de cada nação envolvida no estudo, recorre-se à pesquisa de opinião organizada através da parceria entre a empresa de consultoria GlobeScan e o Program for Public Consultation (PPC) da Universidade de Maryland, financiada pela BBC World News (2017). Especificamente, a pesquisa GlobeScan questiona aos entrevistados se eles percebem determinado Estado como uma influência majoritariamente positiva ou negativa no mundo, retornando dados sobre a percepção de cada Estado em cada país onde a pesquisa foi feita, além da percepção média observada para cada Estado.

Os dados extraídos da pesquisa GlobeScan foram compilados em um arquivo csv, disponibilizado entre os arquivos do projeto.

soft_power <- read.table("datasets/soft_power.csv", header = TRUE, sep = ";")
head(soft_power)
##   iso3c.x iso3c.y Pos_x_over_y Pos_y_over_x Neg_x_over_y Neg_y_over_x DyadCode
## 1     BRA     CAN           71           41           12           36  BRA+CAN
## 2     BRA     CHN           45           57           38           34  BRA+CHN
## 3     BRA     FRA           59           46           19           43  BRA+FRA
## 4     BRA     DEU           63            6           18           16  BRA+DEU
## 5     BRA     IND           23           32           57           21  BRA+IND
## 6     BRA     PAK            5           16           81           23  BRA+PAK

2.3 Fluxo comercial entre os Estados

Conforme mencionado na Introdução, a pesquisa também considera como possíveis variáveis causais as relações econômicas e militares existentes entre os pares de Estados analisados - isto é, dinâmicas de hard power existente entre eles.

Como métrica para as relações econômicas, optou-se pela utilização do fluxo de comércio entre as partes, recorrendo a base de dados disponibilizada pelo UN Comtrade (2022). Por se tratar de um volume de dados extenso e dividido entre diversos data sets, optou-se por realizar a coleta através da API do UN Contrade.

O seguinte bloco de código é extraído diretamente do manual disponibilizado pela própria plataforma. Ele define a função get.Comtrade() que será utilizada para extrair os dados.

get.Comtrade <- function(url="http://comtrade.un.org/api/get?"
                         ,maxrec=50000
                         ,type="C"
                         ,freq="A"
                         ,px="HS"
                         ,ps="now"
                         ,r
                         ,p
                         ,rg="all"
                         ,cc="TOTAL"
                         ,fmt="json"
)
{
  string<- paste(url
                 ,"max=",maxrec,"&" #maximum no. of records returned
                 ,"type=",type,"&" #type of trade (c=commodities)
                 ,"freq=",freq,"&" #frequency
                 ,"px=",px,"&" #classification
                 ,"ps=",ps,"&" #time period
                 ,"r=",r,"&" #reporting area
                 ,"p=",p,"&" #partner country
                 ,"rg=",rg,"&" #trade flow
                 ,"cc=",cc,"&" #classification code
                 ,"fmt=",fmt        #Format
                 ,sep = ""
  )
  
  if(fmt == "csv") {
    raw.data<- read.csv(string,header=TRUE)
    return(list(validation=NULL, data=raw.data))
  } else {
    if(fmt == "json" ) {
      raw.data<- fromJSON(file=string)
      data<- raw.data$dataset
      validation<- unlist(raw.data$validation, recursive=TRUE)
      ndata<- NULL
      if(length(data)> 0) {
        var.names<- names(data[[1]])
        data<- as.data.frame(t( sapply(data,rbind)))
        ndata<- NULL
        for(i in 1:ncol(data)){
          data[sapply(data[,i],is.null),i]<- NA
          ndata<- cbind(ndata, unlist(data[,i]))
        }
        ndata<- as.data.frame(ndata)
        colnames(ndata)<- var.names
      }
      return(list(validation=validation,data =ndata))
    }
  }
}

Infelizmente, a API do UN Comtrade apresenta alguns limites para usuários gratuitos, os quais impõem a necessidade de certas adequações no código de coleta. Entre as limitações mais relevantes para a presente pesquisa, destacam-se: (1) apenas uma solicitação pode ser feita por segundo, com um máximo de 100 solicitações por hora; e (2) entre os argumentos r (reporter), p (partner) e ps (período temporal), se o valor de input não for "all", então o número máximo de inputs é cinco. Partindo dessas limitações técnicas, a forma mais simples de excutar a coleta dos dados parece ser um Estado de cada vez, sempre utilizando o input "all" para o argumento partner, com a subsequente filtragem das notações necessárias.

(Para mais detalhes sobre as limitações da API, consultar o manual).

O bloco de código abaixo define a função get.Comtrade.ctdata(), utilizada para a coleta dos dados de comércio de cada Estado da amostra. Ela recebe dois argumentos, sendo eles o código ISO-alpha 3 e o código M49 referente a cada país. Por sua vez, os blocos de código seguintes utilizam a mencionada função para efetivamente coletar os dados que serão utilizados pela pesquisa.

get.Comtrade.ctdata <- function(state, reporter_code) {
  
  Comtrade.countries <- c("WLD", countries)
  x <- get.Comtrade(r = reporter_code, p = "All", ps = 2017, fmt = "csv")
  as.data.frame(x$data) %>%
    select(Trade.Flow, Reporter.ISO, Partner.ISO, Trade.Value..US..) %>%
    filter(Partner.ISO %in% Comtrade.countries, 
           Partner.ISO != state, 
           Trade.Flow %in% c("Import", "Export")
           )
}
ct_bra <- get.Comtrade.ctdata("BRA", "76")
ct_bra
##    Trade.Flow Reporter.ISO Partner.ISO Trade.Value..US..
## 1      Import          BRA         WLD      165855231418
## 2      Export          BRA         WLD      214988108353
## 3      Import          BRA         CAN        1949757937
## 4      Export          BRA         CAN        2719391044
## 5      Import          BRA         CHN       29094836692
## 6      Export          BRA         CHN       47488449966
## 7      Import          BRA         FRA        4779106958
## 8      Export          BRA         FRA        2249926836
## 9      Import          BRA         DEU        9776468178
## 10     Export          BRA         DEU        4911018150
## 11     Import          BRA         PAK          57549907
## 12     Export          BRA         PAK         605230542
## 13     Import          BRA         RUS        2850168384
## 14     Export          BRA         RUS        2736531853
## 15     Import          BRA         IND        3118728509
## 16     Export          BRA         IND        4657327590
## 17     Import          BRA         GBR        2498535648
## 18     Export          BRA         GBR        2844277431
## 19     Import          BRA         USA       29288180655
## 20     Export          BRA         USA       27147587073
ct_can <- get.Comtrade.ctdata("CAN", "124")
ct_can
##    Trade.Flow Reporter.ISO Partner.ISO Trade.Value..US..
## 1      Import          CAN         WLD      433045052733
## 2      Export          CAN         WLD      420074382189
## 3      Import          CAN         BRA        3634323371
## 4      Export          CAN         BRA        1318993241
## 5      Import          CAN         CHN       54652257046
## 6      Export          CAN         CHN       18185911190
## 7      Import          CAN         FRA        4771843301
## 8      Export          CAN         FRA        2625904722
## 9      Import          CAN         DEU       13856528608
## 10     Export          CAN         DEU        3094368204
## 11     Import          CAN         PAK         316574503
## 12     Export          CAN         PAK         575577308
## 13     Import          CAN         RUS         861087243
## 14     Export          CAN         RUS         517034731
## 15     Import          CAN         IND        3204370406
## 16     Export          CAN         IND        3296682348
## 17     Import          CAN         GBR        6859985097
## 18     Export          CAN         GBR       13633124740
## 19     Import          CAN         USA      222572824420
## 20     Export          CAN         USA      318570259928
ct_chn <- get.Comtrade.ctdata("CHN", "156")
ct_chn
##    Trade.Flow Reporter.ISO Partner.ISO Trade.Value..US..
## 1      Import          CHN         WLD      1.843793e+12
## 2      Export          CHN         WLD      2.263371e+12
## 3      Import          CHN         BRA      5.885716e+10
## 4      Export          CHN         BRA      2.895054e+10
## 5      Import          CHN         CAN      2.042301e+10
## 6      Export          CHN         CAN      3.137545e+10
## 7      Import          CHN         FRA      2.680521e+10
## 8      Export          CHN         FRA      2.796350e+10
## 9      Import          CHN         DEU      9.694011e+10
## 10     Export          CHN         DEU      7.113440e+10
## 11     Import          CHN         PAK      1.833219e+09
## 12     Export          CHN         PAK      1.825079e+10
## 13     Import          CHN         RUS      4.139029e+10
## 14     Export          CHN         RUS      4.283060e+10
## 15     Import          CHN         IND      1.634537e+10
## 16     Export          CHN         IND      6.804225e+10
## 17     Import          CHN         GBR      2.232896e+10
## 18     Export          CHN         GBR      5.671352e+10
## 19     Import          CHN         USA      1.544419e+11
## 20     Export          CHN         USA      4.303281e+11
ct_fra <- get.Comtrade.ctdata("FRA", "251")
ct_fra
##    Trade.Flow Reporter.ISO Partner.ISO Trade.Value..US..
## 1      Import          FRA         WLD      613132639717
## 2      Export          FRA         WLD      523385133284
## 3      Import          FRA         BRA        3331207869
## 4      Export          FRA         BRA        4717214172
## 5      Import          FRA         CAN        3517121418
## 6      Export          FRA         CAN        3564890179
## 7      Import          FRA         CHN       55401050257
## 8      Export          FRA         CHN       21292095767
## 9      Import          FRA         DEU       97082207072
## 10     Export          FRA         DEU       77609886141
## 11     Import          FRA         PAK         970866775
## 12     Export          FRA         PAK         607630592
## 13     Import          FRA         RUS        8606525189
## 14     Export          FRA         RUS        6292661255
## 15     Import          FRA         IND        6051924639
## 16     Export          FRA         IND        6037814785
## 17     Import          FRA         GBR       31123289033
## 18     Export          FRA         GBR       35050753878
## 19     Import          FRA         USA       39676920877
## 20     Export          FRA         USA       38414056721
ct_deu <- get.Comtrade.ctdata("DEU", "276")
ct_deu
##    Trade.Flow Reporter.ISO Partner.ISO Trade.Value..US..
## 1      Import          DEU         WLD      1.167753e+12
## 2      Export          DEU         WLD      1.446642e+12
## 3      Import          DEU         BRA      8.446805e+09
## 4      Export          DEU         BRA      9.683114e+09
## 5      Import          DEU         CAN      4.593835e+09
## 6      Export          DEU         CAN      1.097580e+10
## 7      Import          DEU         CHN      1.164777e+11
## 8      Export          DEU         CHN      9.747448e+10
## 9      Import          DEU         FRA      7.305604e+10
## 10     Export          DEU         FRA      1.189321e+11
## 11     Import          DEU         PAK      1.900411e+09
## 12     Export          DEU         PAK      1.364074e+09
## 13     Import          DEU         RUS      2.540074e+10
## 14     Export          DEU         RUS      2.985072e+10
## 15     Import          DEU         IND      9.674712e+09
## 16     Export          DEU         IND      1.211342e+10
## 17     Import          DEU         GBR      4.095668e+10
## 18     Export          DEU         GBR      9.582774e+10
## 19     Import          DEU         USA      7.175558e+10
## 20     Export          DEU         USA      1.263669e+11
ct_ind <- get.Comtrade.ctdata("IND", "699")
ct_ind
##    Trade.Flow Reporter.ISO Partner.ISO Trade.Value..US..
## 1      Import          IND         WLD      444052353836
## 2      Export          IND         WLD      294364490162
## 3      Import          IND         BRA        5104464250
## 4      Export          IND         BRA        2867436333
## 5      Import          IND         CAN        4844236758
## 6      Export          IND         CAN        2316419822
## 7      Import          IND         CHN       71922747817
## 8      Export          IND         CHN       12495230459
## 9      Import          IND         FRA        4931260139
## 10     Export          IND         FRA        5037498128
## 11     Import          IND         DEU       12665121178
## 12     Export          IND         DEU        8233600524
## 13     Import          IND         PAK         469331037
## 14     Export          IND         PAK        1789337609
## 15     Import          IND         RUS        7980558686
## 16     Export          IND         RUS        2138971950
## 17     Import          IND         GBR        4344085719
## 18     Export          IND         GBR        8954722988
## 19     Import          IND         USA       24086156632
## 20     Export          IND         USA       46018076640
ct_pak <- get.Comtrade.ctdata("PAK", "586")
ct_pak
##    Trade.Flow Reporter.ISO Partner.ISO Trade.Value..US..
## 1      Import          PAK         WLD       57440012500
## 2      Export          PAK         WLD       21877787164
## 3      Import          PAK         BRA         612681684
## 4      Export          PAK         BRA          46750037
## 5      Import          PAK         CAN         638932961
## 6      Export          PAK         CAN         244887892
## 7      Import          PAK         CHN       15383397803
## 8      Export          PAK         CHN        1508079658
## 9      Import          PAK         FRA         667698804
## 10     Export          PAK         FRA         399939263
## 11     Import          PAK         DEU        1111487582
## 12     Export          PAK         DEU        1286490628
## 13     Import          PAK         RUS         310938248
## 14     Export          PAK         RUS         130895412
## 15     Import          PAK         IND        1696136475
## 16     Export          PAK         IND         334751881
## 17     Import          PAK         GBR         766014848
## 18     Export          PAK         GBR        1634955498
## 19     Import          PAK         USA        2842546760
## 20     Export          PAK         USA        3560300692
ct_rus <- get.Comtrade.ctdata("RUS", "643")
ct_rus
##    Trade.Flow Reporter.ISO Partner.ISO Trade.Value..US..
## 1      Import          RUS         WLD      259966680280
## 2      Export          RUS         WLD      379206606018
## 3      Import          RUS         BRA        3240313961
## 4      Export          RUS         BRA        2658169828
## 5      Import          RUS         CAN        1071929629
## 6      Export          RUS         CAN         651403631
## 7      Import          RUS         CHN       56950375658
## 8      Export          RUS         CHN       41671349422
## 9      Import          RUS         FRA       10386846851
## 10     Export          RUS         FRA        6028246091
## 11     Import          RUS         DEU       28441062048
## 12     Export          RUS         DEU       26202990313
## 13     Import          RUS         PAK         286981263
## 14     Export          RUS         PAK         263166465
## 15     Import          RUS         IND        3094140016
## 16     Export          RUS         IND        7125588189
## 17     Import          RUS         GBR        4545303313
## 18     Export          RUS         GBR        8862350338
## 19     Import          RUS         USA       14282980847
## 20     Export          RUS         USA       11790525621
ct_gbr <- get.Comtrade.ctdata("GBR", "826")
ct_gbr
##    Trade.Flow Reporter.ISO Partner.ISO Trade.Value..US..
## 1      Import          GBR         WLD      640907688603
## 2      Export          GBR         WLD      441847324214
## 3      Import          GBR         BRA        3130525619
## 4      Export          GBR         BRA        2320627874
## 5      Import          GBR         CAN       14870819750
## 6      Export          GBR         CAN        6231706274
## 7      Import          GBR         CHN       59860984044
## 8      Export          GBR         CHN       21382916068
## 9      Import          GBR         FRA       36458562716
## 10     Export          GBR         FRA       30381010916
## 11     Import          GBR         DEU       89639326173
## 12     Export          GBR         DEU       46663005497
## 13     Import          GBR         PAK        1634755403
## 14     Export          GBR         PAK         883603447
## 15     Import          GBR         RUS        7234127039
## 16     Export          GBR         RUS        3696871820
## 17     Import          GBR         IND        9179510043
## 18     Export          GBR         IND        5250483221
## 19     Import          GBR         USA       58827516056
## 20     Export          GBR         USA       59098116090
ct_usa <- get.Comtrade.ctdata("USA", "842")
ct_usa
##    Trade.Flow Reporter.ISO Partner.ISO Trade.Value..US..
## 1      Import          USA         WLD      2.405277e+12
## 2      Export          USA         WLD      1.545810e+12
## 3      Import          USA         BRA      3.055194e+10
## 4      Export          USA         BRA      3.732969e+10
## 5      Import          USA         CAN      3.056477e+11
## 6      Export          USA         CAN      2.824503e+11
## 7      Import          USA         CHN      5.257647e+11
## 8      Export          USA         CHN      1.297975e+11
## 9      Import          USA         FRA      5.004967e+10
## 10     Export          USA         FRA      3.421804e+10
## 11     Import          USA         DEU      1.199630e+11
## 12     Export          USA         DEU      5.356161e+10
## 13     Import          USA         PAK      3.762270e+09
## 14     Export          USA         PAK      2.808081e+09
## 15     Import          USA         RUS      1.777715e+10
## 16     Export          USA         RUS      7.002945e+09
## 17     Import          USA         IND      5.051929e+10
## 18     Export          USA         IND      2.564823e+10
## 19     Import          USA         GBR      5.417152e+10
## 20     Export          USA         GBR      5.624232e+10

A partir deste ponto, as bases de dados estão todas formatadas do mesmo modo, contendo apenas as informações que serão de fato empregadas na análise, isto é, os dados de importação e exportação. Entretanto, como a pesquisa não demanda distinção da direção do fluxo do comércio, vale a pena criar uma nova variável que agrupe os valores de importação e exportação entre as díades de Estados. A forma mais fácil de fazer isso é através das funções spread(), usada aqui para criar as variáveis Export e Import a partir das variáveis Trade.Flow e Trade.Value..US.., e mutate(), usada para criar a nova variável Total.Trade.Value_USD a partir das variáveis Export e Import.

ct_bra <- ct_bra %>%
  spread(Trade.Flow, Trade.Value..US..) %>%
  mutate(Total.Trade.Value_USD = Export + Import, .keep = "unused")

ct_can <- ct_can %>%
  spread(Trade.Flow, Trade.Value..US..) %>%
  mutate(Total.Trade.Value_USD = Export + Import, .keep = "unused")

ct_chn <- ct_chn %>%
  spread(Trade.Flow, Trade.Value..US..) %>%
  mutate(Total.Trade.Value_USD = Export + Import, .keep = "unused")

ct_deu <- ct_deu %>%
  spread(Trade.Flow, Trade.Value..US..) %>%
  mutate(Total.Trade.Value_USD = Export + Import, .keep = "unused")

ct_fra <- ct_fra %>%
  spread(Trade.Flow, Trade.Value..US..) %>%
  mutate(Total.Trade.Value_USD = Export + Import, .keep = "unused")

ct_gbr <- ct_gbr %>%
  spread(Trade.Flow, Trade.Value..US..) %>%
  mutate(Total.Trade.Value_USD = Export + Import, .keep = "unused")

ct_ind <- ct_ind %>%
  spread(Trade.Flow, Trade.Value..US..) %>%
  mutate(Total.Trade.Value_USD = Export + Import, .keep = "unused")

ct_pak <- ct_pak %>%
  spread(Trade.Flow, Trade.Value..US..) %>%
  mutate(Total.Trade.Value_USD = Export + Import, .keep = "unused")

ct_rus <- ct_rus %>%
  spread(Trade.Flow, Trade.Value..US..) %>%
  mutate(Total.Trade.Value_USD = Export + Import, .keep = "unused")

ct_usa <- ct_usa %>%
  spread(Trade.Flow, Trade.Value..US..) %>%
  mutate(Total.Trade.Value_USD = Export + Import, .keep = "unused")

Agora as bases de dados apresentam apenas 3 valores: (1) o Estado que apresentou o report; (2) seu parceiro comercial; e (3) as trocas com esse parceiro em volume total de dólares norte-americanos (USD).

Nesse ponto, uma observação se faz relevante: em todos as observações, embora o valor em USD do fluxo comercial de x com y seja muito próximo do de y com x, estes nunca são iguais, mesmo que em tese devessem ser. Isso se deve pois o primeiro é calculado com base nos relatórios comerciais do Estado x, enquanto o segundo se baseia nos relatórios do Estado y, criando um cenário no qual pequenas inconsistências são inevitáveis.

Isto posto, o valor bruto dessas trocas comerciais é uma informação secundária, tendo em vista que o real interesse é em saber a proporção desse valor com relação ao fluxo comercial total desses Estados. Assim, foi optado pela manutenção dessas variáveis como estavam, tendo em vista que a informação mais relevante é o quão representativas são essas trocas comerciais em relação ao fluxo comercial destes Estados como um todo, a qual poderia ser negativamente afetada frente a qualquer tentativa de ajuste.

É importante ainda criar uma quarta variável, Share_of_trade, estabelecida para cada díade com relação ao total de trocas comerciais do Estado que apresentou o report. Feito isso, a informação do total de trocas entre cada Estado e o resto do mundo deixa de ser relevante, podendo ser filtrada para fora das bases de dados.

BRA_WLD_trade <- ct_bra[ct_bra$Partner.ISO == "WLD", "Total.Trade.Value_USD"]
ct_bra <- ct_bra %>%
  mutate(Share_of_trade = Total.Trade.Value_USD / BRA_WLD_trade) %>%
  filter(Partner.ISO != "WLD")

CAN_WLD_trade <- ct_can[ct_can$Partner.ISO == "WLD", "Total.Trade.Value_USD"]
ct_can <- ct_can %>%
  mutate(Share_of_trade = Total.Trade.Value_USD / CAN_WLD_trade) %>%
  filter(Partner.ISO != "WLD")

CHN_WLD_trade <- ct_chn[ct_chn$Partner.ISO == "WLD", "Total.Trade.Value_USD"]
ct_chn <- ct_chn %>%
  mutate(Share_of_trade = Total.Trade.Value_USD / CHN_WLD_trade) %>%
  filter(Partner.ISO != "WLD")

DEU_WLD_trade <- ct_deu[ct_deu$Partner.ISO == "WLD", "Total.Trade.Value_USD"]
ct_deu <- ct_deu %>%
  mutate(Share_of_trade = Total.Trade.Value_USD / DEU_WLD_trade) %>%
  filter(Partner.ISO != "WLD")

FRA_WLD_trade <- ct_fra[ct_fra$Partner.ISO == "WLD", "Total.Trade.Value_USD"]
ct_fra <- ct_fra %>%
  mutate(Share_of_trade = Total.Trade.Value_USD / FRA_WLD_trade) %>%
  filter(Partner.ISO != "WLD")

GBR_WLD_trade <- ct_gbr[ct_gbr$Partner.ISO == "WLD", "Total.Trade.Value_USD"]
ct_gbr <- ct_gbr %>%
  mutate(Share_of_trade = Total.Trade.Value_USD / GBR_WLD_trade) %>%
  filter(Partner.ISO != "WLD")

IND_WLD_trade <- ct_ind[ct_ind$Partner.ISO == "WLD", "Total.Trade.Value_USD"]
ct_ind <- ct_ind %>%
  mutate(Share_of_trade = Total.Trade.Value_USD / IND_WLD_trade) %>%
  filter(Partner.ISO != "WLD")

PAK_WLD_trade <- ct_pak[ct_pak$Partner.ISO == "WLD", "Total.Trade.Value_USD"]
ct_pak <- ct_pak %>%
  mutate(Share_of_trade = Total.Trade.Value_USD / PAK_WLD_trade) %>%
  filter(Partner.ISO != "WLD")

RUS_WLD_trade <- ct_rus[ct_rus$Partner.ISO == "WLD", "Total.Trade.Value_USD"]
ct_rus <- ct_rus %>%
  mutate(Share_of_trade = Total.Trade.Value_USD / RUS_WLD_trade) %>%
  filter(Partner.ISO != "WLD")

USA_WLD_trade <- ct_usa[ct_usa$Partner.ISO == "WLD", "Total.Trade.Value_USD"]
ct_usa <- ct_usa %>%
  mutate(Share_of_trade = Total.Trade.Value_USD / USA_WLD_trade) %>%
  filter(Partner.ISO != "WLD")

Com todos os data frames devidamente configurados, podemos proceder para sua junção em um único banco de dados, feita através da função rbind().

ct_data <- rbind(ct_bra, ct_can, ct_chn, ct_deu, ct_fra, ct_gbr, ct_ind, ct_pak, ct_rus, ct_usa)
ct_data <- format(ct_data, scientific = FALSE)
head(ct_data)
##   Reporter.ISO Partner.ISO Total.Trade.Value_USD Share_of_trade
## 1          BRA         CAN            4669148981   0.0122600253
## 2          BRA         CHN           76583286658   0.2010886857
## 3          BRA         DEU           14687486328   0.0385656904
## 4          BRA         FRA            7029033794   0.0184564966
## 5          BRA         GBR            5342813079   0.0140288999
## 6          BRA         IND            7776056099   0.0204179916

Agora a base apresenta as informações consolidadas do fluxo de comércio total do Estado x (Reporter.ISO) com o Estado y (Partner.ISO), além da porcentagem referente a parcela que esse fluxo comercial representa sobre a totalidade das trocas feitas pelo Estado x, com cada díade aparecendo duas vezes. Como a pesquisa vai recorrer tanto a porcentagem de trocas de x sobre y, quanto de y sobre x, é interessante agrupar esses dados na mesma linha.

Uma forma fácil de fazer isso é criando dois novos bancos de dados, renomeando as variáveis Reporter.ISO e Partner.ISO para Country_x e Country_y, invertendo a atribuição de x e y em cada caso, seguido de uma nova junção destes bancos de dados em um único, ancorado nos valores de Country_x e Country_y.

Nota-se que o produto ainda será uma base de dados com 90 díades, com cada uma se repetindo duas vezes, tal qual na base de dados das votações na AGNU. Trata-se de um problema de fácil solução, tendo em vista que basta introduzir a variável de DyadCode e, durante o processo de união de todos os dataframes, eliminar as observações que não constem no banco do GlobeScan, o qual já está corretamente filtrado.

ct_a <- ct_data %>%
  rename(Country_x = Reporter.ISO) %>%
  rename(Country_y = Partner.ISO) %>%
  rename(Share_x_with_y = Share_of_trade)

ct_b <- ct_data %>%
  rename(Country_y = Reporter.ISO) %>%
  rename(Country_x = Partner.ISO) %>%
  rename(Share_y_with_x = Share_of_trade)

trade_data <- ct_a %>%
  full_join(ct_b, by = c("Country_x","Country_y")) %>%
  mutate(DyadCode = paste(Country_x, 
                          Country_y, sep = "+")) %>%
  select(DyadCode, Country_x, Country_y, Share_x_with_y, Share_y_with_x)

head(trade_data)
##   DyadCode Country_x Country_y Share_x_with_y Share_y_with_x
## 1  BRA+CAN       BRA       CAN   0.0122600253   0.0058061233
## 2  BRA+CHN       BRA       CHN   0.2010886857   0.0213791573
## 3  BRA+DEU       BRA       DEU   0.0385656904   0.0069346498
## 4  BRA+FRA       BRA       FRA   0.0184564966   0.0070816508
## 5  BRA+GBR       BRA       GBR   0.0140288999   0.0050345216
## 6  BRA+IND       BRA       IND   0.0204179916   0.0107959355

2.4 Relações militares

O aspecto do hard power que diz respeito as relações militares entre os Estados é de difícil mensuração. Embora o conceito seja originalmente definido no sentido de ameaça do uso da força, métricas nesse sentido são raras e, em geral, imprecisas. Opta-se ao invés disso por usar o padrão de alianças militares entre os Estados como uma variável proxy, tendo em vista que a existência dessas reduz drasticamente as chances do uso da força nas relações entre dois países. Para tanto, será utilizado o banco de dados Formal Alliances (v4.1), disponível como parte do projeto The Correlates of War.

Embora sua última atualização remeta ao ano de 2012, sendo, portanto, cinco anos mais antiga que os demais dados aqui trabalhados, a análise tende a não ser prejudicada, haja visto que se trata de uma métrica muito estável. Conforme demonstrado abaixo, mesmo se considerarmos o ano de 2012 como ponto final de todas as alianças então correntes, a duração média dessas alianças é de aproximadamente 22 anos.

cow_avg <- read.table("datasets/alliance_v4.1_by_dyad.csv", header=T, sep=",") %>%
  mutate(dyad_end_year = ifelse(is.na(dyad_end_year), 2012, dyad_end_year),
         years_duration = dyad_end_year - dyad_st_year) %>%
  summarise(mean(years_duration))
cow_avg
##   mean(years_duration)
## 1             22.00714

Avançando para a coleta destes dados propriamente dita, nota-se que, dos quatro arquivos disponibilizados pelo COW referentes a este dataset, o “alliance_v4.1_by_directed_yearly.csv” é o que apresenta as informações mais detalhadas, incluindo uma observação para cada ano no qual a aliança permaneceu ativa. Isso permite facilmente realizar a filtragem dos dados para conter apenas as alianças entre os Estados da amostra e que estavam ativas em 2012.

cow_countries <- c("Brazil", "Canada", "China", "France", "Germany", "India", "Pakistan", "Russia", "United Kindom", "United States of America")

cow_data <- read.table("datasets/alliance_v4.1_by_dyad_yearly.csv", header=T, sep=",") %>%
  filter(year == 2012,
         state_name1 %in% cow_countries,
         state_name2 %in% cow_countries) %>%
  select(state_name1, state_name2, defense, neutrality, nonaggression, entente)

head(cow_data)
##                state_name1 state_name2 defense neutrality nonaggression entente
## 1 United States of America      Canada       1          0             1       1
## 2 United States of America      Brazil       1          0             1       1
## 3                   Canada      Brazil       1          0             1       1
## 4 United States of America      Canada       1          0             1       1
## 5 United States of America      France       1          0             1       1
## 6 United States of America     Germany       1          0             1       1

Diferente dos demais dados que serão utilizados, a base do COW não apresenta os códigos ISO-alpha 3 para os Estados, empregando apenas seu nome por extenso. Para a facilitar a futura junção das diferentes bases de dados, uma padronização é necessária para concluir a limpeza.

cow_data[cow_data == "Brazil"] <- "BRA"
cow_data[cow_data == "Canada"] <- "CAN"
cow_data[cow_data == "China"] <- "CHN"
cow_data[cow_data == "France"] <- "FRA"
cow_data[cow_data == "Germany"] <- "DEU"
cow_data[cow_data == "India"] <- "IND"
cow_data[cow_data == "Pakistan"] <- "PAK"
cow_data[cow_data == "Russia"] <- "RUS"
cow_data[cow_data == "United Kindom"] <- "GBR"
cow_data[cow_data == "United States of America"] <- "USA"

cow_data_1 <- cow_data %>%
  rename(iso3c.x = state_name1, iso3c.y = state_name2)
cow_data_2 <- cow_data %>%
  rename(iso3c.y = state_name1, iso3c.x = state_name2)

cow_data <- rbind(cow_data_1, cow_data_2)
cow_data <- cow_data %>%
  mutate(DyadCode = paste(cow_data$iso3c.x,
                          cow_data$iso3c.y, sep = "+"))
head(cow_data)
##   iso3c.x iso3c.y defense neutrality nonaggression entente DyadCode
## 1     USA     CAN       1          0             1       1  USA+CAN
## 2     USA     BRA       1          0             1       1  USA+BRA
## 3     CAN     BRA       1          0             1       1  CAN+BRA
## 4     USA     CAN       1          0             1       1  USA+CAN
## 5     USA     FRA       1          0             1       1  USA+FRA
## 6     USA     DEU       1          0             1       1  USA+DEU

3 Análise inicial e calibração fuzzy

3.1 Proximidade política entre dois Estados

Conforme já mencionado, uma questão comum nas bases de dados trabalhadas é a duplicidade dos valores referentes as díades. Os dados relacionais entre Brasil e China, por exemplo, aparecem duas vezes, primeiro com o DyadCode BRA+CHN; depois como CHN+BRA. Apesar da ordem invertida, os dados são os mesmos, sendo aconselhável filtrar a versão dobrada. Felizmente, os dados da pesquisa BBC / Globescan estão corretos, podendo servir de base para a filtragem das demais bases.

clean_set <- soft_power %>%
  select(DyadCode)

un_data <- clean_set %>%
  inner_join(un_data, by = "DyadCode")

Uma vez filtrada, a base de dados sobre os padrões de votação na AGNU agora traz duas informações relevantes: a % de concordância entre os pares de Estados; e seu ideal point distance (IPD) naquele ano.

Como Bailey, Strezhnev e Voeten (2009) apontam, o IPD é uma métrica mais apropriada para medir o posicionamento dos Estados, tendo em vista que seu cálculo considera potenciais alterações na agenda da AGNU entre as sessões, razão pela qual a pesquisa opta por seu uso. Nota-se ainda que, quanto maior o IPD entre dois países, mais distintos são seus padrões de voto.

Assim, o primeiro passo na análise parece ser verificar como se distribuem ao logo da amostra os IPD entre os pares de Estados que estão sendo considerados.

g1 <- ggplot(un_data, aes(x = reorder(DyadCode, -IdealPointDistance), y = IdealPointDistance))+
  geom_histogram(stat = "identity", alpha = 0.6, fill = "#66adff")+
  theme_minimal()+
  theme(axis.text.x = element_blank(), 
        axis.ticks.x = element_blank())+
  labs(title = "Distribuição dos IPD entre os pares de Estados", 
       subtitle = "2017",
       caption="Dados de Voeten, Strezhnev e Bailey (2009).",
       y = "IPD",
       x = "Pares de Estados")

ggplotly(g1)

É possível notar três grupos distintos, sendo eles: (1) pares de Estados com uma discordância inferior a 0.5; (2) pares com uma discordância superior a 2.5; e (3) pares cuja discordância flutua entre, aproximadamente, 1 e 2 pontos - isto é, Estados que sistematicamente votam de forma similar; Estados que sistematicamente adotam posições antagônicas; e Estados cujas posições parecem ser independentes.

Um padrão similar surge ao considerarmos a relação entre a similaridade dos votos e porcentagem de concordância:

un_data <- un_data %>%
  mutate(group = ifelse(IdealPointDistance > 2.5, "Próximos",
                        ifelse(IdealPointDistance < 0.5, "Antagônicos", 
                               "Independentes")))

g2 <- ggplot(un_data, aes(x = IdealPointDistance,
                          y = agree,
                          label = DyadCode,
                          color = group))+
  geom_point()+
  theme_minimal()+
  scale_color_manual(values=c("#619CFF", "#00BA38", "#F8766D"))+
  theme(legend.position = "none")+
  labs(title = "IPD vs. Similaridade dos votos entre os pares de Estados", 
       subtitle = "2017",
       caption="Dados de Voeten, Strezhnev e Bailey (2009).",
       x = "IPD",
       y = "Similaridade (% de concordância)")

ggplotly(g2, tooltip = c("DyadCode", "IdealPointDistance"))

Nota-se que o fsQCA demanda o estabelecimento de três limiares qualitativos para cada variável considerada na análise, representando os limiares de completa adesão dos casos ao conjunto que a variável representa [1]; sua completa exclusão do conjunto [0]; e o ponto de máxima ambiguidade entre pertencimento e exclusão [0.5].

Assim, no caso da variável em questão, opta-se por considerar um IPD de 0.5 como limiar de pleno pertencimento pleno ao conjunto de diádes politicamente próximas; 2.5 como limiar de plena exclusão do conjunto; e 1.5 como o ponto de máxima ambiguidade.

Com base nesses limiares qualitativos, se avança para a calibração dos dados para os valores difusos que serão empregados, cujas âncoras qualitativas já foram apresentadas. Para tanto, emprega-se a função calibrate, disponível como parte do pacote QCA, de autoria de Adrian Dusa (2019), onde:

  • type se refere ao tipo de calibração (“crisp” ou “fuzzy”), aqui sendo empregada a modalidade fuzzy;
  • method se refere ao método da calibração (“direct” ou “indirect”), aqui sendo empregado o método direto; e
  • thresholds se referem as âncoras qualitativas empregadas, sendo “e” referente ao ponto de exclusão do conjunto (0.05), “c” ao ponto de máxima ambiguidade (0.5), e “i” ao ponto de plena inclusão no conjunto (0.95). Nota-se ainda que a variável Força das Relações Militares já está configurada no formato fuzzy, dispensando a calibração.

O bloco de código abaixo calibra os dados em questão com os valores supracitados, seguido da apresentação gráfica do conjunto de dados calibrados.

3.2 Soft power indireto (atração)

A teoria fornence poucas indicações do tratamento que deve ser dado às opiniões negativas, apenas sugerindo que estas podem afetar o soft power de uma nação tanto quanto as opiniões positivas das populações de outros Estados sobre a nação em questão (Nye, 2004). Assim, será feita a opção por desagregar a análise em duas variáveis, trabalhando inicialmente apenas com as opiniões positivas (atração).

Ademais, diferente da variável anterior, que apresenta um único valor para cada díade de Estados, a métrica utilizada para medir o soft power indireto existente entre os Estados oferece dois valores, sendo eles a porcentagem da população do país x que apresenta uma visão positiva do país y; e a porcentagem da população do país y que apresenta uma visão positiva do país x. Sendo as relações de poder um fenômeno relacional por definição, opta-se por trabalhar com as médias das opiniões positivas registradas em cada díade, haja visto que ambas as populações nutrindo uma opinião positiva sobre o outro país deve fortalecer de ambos os lados os incentivos para que seus governos aproximem suas políticas externas, tornando essa aproximação mais provável.

soft_power$avg_p <- (soft_power$Pos_x_over_y + soft_power$Pos_y_over_x)/2
  

p_views <- soft_power %>%
  select(DyadCode, avg_p)

head(p_views)
##   DyadCode avg_p
## 1  BRA+CAN  56.0
## 2  BRA+CHN  51.0
## 3  BRA+FRA  52.5
## 4  BRA+DEU  34.5
## 5  BRA+IND  27.5
## 6  BRA+PAK  10.5

Recortado apenas as avaliações positivas e obtendo valor máximo para cada díade, se avança para a análise gráfica da variável em questão, começando por sua distribuição ao logo da amostra.

g4 <- ggplot(p_views, aes(x = reorder(DyadCode, -avg_p), y = avg_p))+
        geom_bar(stat = "identity", alpha = 0.6, fill = "#619CFF")+
        theme_minimal()+
        theme(axis.text.x = element_blank(), 
              axis.ticks.x = element_blank())+
        labs(title = "Distribuição das opiniões positivas - Valor médio entre as díades", 
        subtitle = "2017",
        caption="Pesquisa BBC/GlobeScan (2017).",
        y = "% de respondentes",
        x = element_blank())

ggplotly(g4)

Considera-se que mesmo entre os países que não são uma democracia, o índice médio de 50% de opiniões positivas em uma díade deve fornecer incentivos fortes o suficientes para a criação de um ambiente favorável a aproximação de suas políticas externas - ao menos partindo do pressuposto que o soft power indireto funcionará conforme previsto por Nye (2004). Por outro lado, índices inferiores a 5% devem apresentar situações nas quais as populações destes Estados não apresentem qualquer pressão relevante por uma aproximação entre seus Estados, tornando-os, efetivamente, independentes do soft power indireto gerado por qualquer uma das partes. Por sua vez, uma média próxima a 1/3 das populações desses Estados apresentando opiniões positivas sobre o outro parece apresentar o ponto máximo de ambiguidade.

Assim, se estabelece como 50% o limiar para o completo pertencimento de casos ao conjunto de díades com opiniões positivas favoráveis; 5% como o limiar para a completa exclusão do conjunto; e 33% como o ponto de máxima ambiguidade.

3.3 Soft power “negativo” (repulsão)

Concluída a calibração das opiniões positivas, avançamos para a segunda variável relativa ao soft power nacional, isto é, as opiniões negativas que cada país analisado desperta nas populações dos demais.

soft_power$avg_n <- (soft_power$Neg_x_over_y + soft_power$Neg_y_over_x)/2

n_views <- soft_power %>%
  select(DyadCode, avg_n)

head(n_views)
##   DyadCode avg_n
## 1  BRA+CAN    24
## 2  BRA+CHN    36
## 3  BRA+FRA    31
## 4  BRA+DEU    17
## 5  BRA+IND    39
## 6  BRA+PAK    52

Avançando para a análise gráfica da variável em questão, têm-se:

Como no caso anterior, essa variável também extraí seus dados da pesquisa BBC / GlobeScan, com a mesma lógica sen aplicável: tomando o limiar médio de 50% para definir quando as opiniões negativas entre uma díade são fortes o suficiente para criar incentios contrários a aproximação de suas políticas externas. Igualmente, toma-se os índices inferiores a 5% para definir situações livres de pressão por um afastamento e 33% como ponto máximo de ambiguidade.

3.4 Fluxo comercial

De forma semelhante ao notado nas variáveis associadas ao soft power nacional, o fluxo de comércio também apresenta dois valores para os Estados de cada díade, referentes a porcentagem que um Estado x representa do total das trocas comerciais com o Estado y e vice-versa. Assim, considerando a necessidade de agregar esses valores em uma única métrica que faça sentido na análise relacional proposta, o mesmo tratamento será aplicado, baseando a análise no valor médio entre os dois valores apresentados.

trade_data <- clean_set %>%
  inner_join(trade_data, by = "DyadCode")

trade_data$Share_x_with_y <- as.numeric(trade_data$Share_x_with_y)
trade_data$Share_y_with_x <- as.numeric(trade_data$Share_y_with_x)
trade_data$avg_trade <- (trade_data$Share_x_with_y + trade_data$Share_y_with_x)/2

trade_data <- trade_data %>%
  select(DyadCode, avg_trade)

head(trade_data)
##   DyadCode   avg_trade
## 1  BRA+CAN 0.009033074
## 2  BRA+CHN 0.111233921
## 3  BRA+FRA 0.012769074
## 4  BRA+DEU 0.022750170
## 5  BRA+IND 0.015606964
## 6  BRA+PAK 0.005027045
g8 <- ggplot(trade_data, aes(x = reorder(DyadCode, -avg_trade), y = avg_trade))+
        geom_histogram(stat = "identity", alpha = 0.5, fill = "#00BA38")+
        theme_minimal()+
        theme(axis.text.x = element_blank(),
              axis.ticks.x = element_blank())+
        scale_y_continuous(labels = scales::percent)+
        labs(
          title = "% das trocas comerciais - Valor médio entre as díades de Estados",
          subtitle = "2017",
          caption="UN Comtrade (2022).",
          y = element_blank(),
          x = element_blank())

ggplotly(g8)

É relevante notar que essa métrica ignora aspectos como a importancia estratégica de cada produto, além não considerar outros aspectos das relações econômicas entre as partes, sobretudo no setor de investimentos. Essa também é sem dúvida a variável com a ancoragem qualitativa mais complexa, com a teoria base fornecendo poucos indícios para os limiares demandados pelo QCA. Essa variável deve assim ser tomada como uma proxy um tanto problemática, a qual, idealmente, deve ser substituída por métricas mais confiáveis no futuro, caso essas se tornem acessíveis.

Isto posto, se adotará como limiares qualitativos os valores de 0.15 (15%) para determinar a dependencia de uma economia sobre a outra; 0.01 (1%) como limiar de independencia entre os mercados; e 0.075 (7.5%) como ponto de máxima ambiguidade.

3.5 Relações Militares

O banco de dados do Correlates of War (COW) oferece informações sobre quatro tipos distintos de alianças formais entre Estados, sendo:

  • defense”, quando os Estados se comprometem a oferecer suporte militar caso a segurança de uma das partes seja violada;
  • neutrality”, quando as partes se comprometem a não tomar parte em conflitos nos quais a outra parte esteja envolvida;
  • nonaggression”, quando concordam com uma promessa de não agressão uma em relação a outra; e
  • entente”, quando concordam em consultar um ao outro em casos de crise.

Conforme apontado por Douglas Gibler (2009), pesquisador responsável pelo dataset em questão, notavelmente há um certo grau de hierarquia entre os tipos de aliança, com o tratado de defesa no topo, seguido pelo de neutralidade, não-agressão e o de entente, com os tratados de hierarquias superiores comumente incluindo cláusulas referentes ao demais tipos. Assim, de certo modo, a própria base de dados oferece os limiares necessários para a realização do QCA. Destarter, opta-se pela utilização, nesse caso específico, do método de calibração fuzzy indireto estabelecendo os tratados de defesa como o limiar qualitativo de pleno pertencimento de cada díade no conjunto de Estados que são aliados (1); os tratados de neutralidade (0.8) e não-agressão (0.6) como casos que estão mais dentro do que fora do conjunto; o tratado de entente (0.4) como casos que estão mais fora do que dentro do conjunto; e a inexistência de qualquer tratado como limiar de plena exclusão (0).

O bloco de códigos abaixo organiza a base de dados de acordo com o os parâmetros estabelecidos acima.

cow_data <- cow_data %>%
  mutate(fs_alliance = ifelse(defense == 1, 1,
                          ifelse(neutrality == 1, 0.8,
                            ifelse(nonaggression == 1, 0.6,
                              ifelse(entente == 1, 0.4, 0))))) %>%
  select(DyadCode, fs_alliance) %>%
  distinct(.keep_all = FALSE) %>%
  right_join(clean_set, by = "DyadCode") %>%
  replace(is.na(.), 0)

head(cow_data)
##   DyadCode fs_alliance
## 1  CAN+FRA         1.0
## 2  CAN+DEU         1.0
## 3  FRA+DEU         1.0
## 4  IND+PAK         0.6
## 5  DEU+RUS         0.8
## 6  FRA+RUS         0.4

Com o data frame configurado, a tabela abaixo apresenta a distribuição dos casos da amostra:

tibble(
  Limiares_qualitativos = c("Díades com tratados de defesa [1]",
                            "Díades com tratados de neutralidade [0.8]",
                            "Díades com tratados de não-agressão [0.6]",
                            "Díades com tratados de entente [0.4]",
                            "Díades sem tratados militares [0]"),
  Frequência = c(
    (nrow(subset(cow_data, fs_alliance == 1))),
    (nrow(subset(cow_data, fs_alliance == 0.8))),
    (nrow(subset(cow_data, fs_alliance == 0.6))),
    (nrow(subset(cow_data, fs_alliance == 0.4))),
    (nrow(subset(cow_data, fs_alliance == 0)))
  )
)
## # A tibble: 5 × 2
##   Limiares_qualitativos                     Frequência
##   <chr>                                          <int>
## 1 Díades com tratados de defesa [1]                  9
## 2 Díades com tratados de neutralidade [0.8]          2
## 3 Díades com tratados de não-agressão [0.6]          3
## 4 Díades com tratados de entente [0.4]               1
## 5 Díades sem tratados militares [0]                 30

4 mvQCA

Com todos os bancos de dados coletados e calibrados, podemos proceder para a junção desse material em um único banco de dados, o qual servirá de base para a construção da tabela verdade da análise.

qca_data <- clean_set %>%
  inner_join(un_data, by = "DyadCode") %>%
  inner_join(p_views, by = "DyadCode") %>%
  inner_join(n_views, by = "DyadCode") %>%
  inner_join(trade_data, by = "DyadCode") %>%
  inner_join(cow_data, by = "DyadCode") %>%
  select(DyadCode, fs_unvotes, fs_pviews, fs_nviews, fs_trade, fs_alliance)

head(qca_data)
##   DyadCode fs_unvotes  fs_pviews fs_nviews   fs_trade fs_alliance
## 1  BRA+CAN  0.3076159 0.98172277 0.2796040 0.04796000           1
## 2  BRA+CHN  0.9855611 0.95761459 0.6270558 0.80573227           0
## 3  BRA+FRA  0.2582520 0.96699214 0.4476137 0.05630591           0
## 4  BRA+DEU  0.4931461 0.56458797 0.1567599 0.08573430           0
## 5  BRA+IND  0.9833963 0.35930730 0.7386983 0.06353931           0
## 6  BRA+PAK  0.9848704 0.08579712 0.9641134 0.04032167           0

Com os dados consolidados, o próximo passo é realizar a análise de necessidade das variáveis causais para a presença da variável de resultado. Conforme sugerido por Schneider e Wagemann (2007), adota-se um patamar de consistência mínimo de 0.9 para considerar uma condição como necessária. Esses valores podem ser obtidos através da função pof, onde setms se refere a variável de interesse; outcome a variável de resultado; e relation a relação que se busca entre os dois conjuntos - no caso, da variável de interesse ser necessária para a ocorrência da variável de resultado.

n1 <- pof(setms = qca_data$fs_pviews,
          outcome = qca_data$fs_unvotes,
          relation = "necessity")
n1 <- as.data.frame(n1$incl.cov)

n2 <- pof(setms = qca_data$fs_nviews,
          outcome = qca_data$fs_unvotes,
          relation = "necessity")
n2 <- as.data.frame(n2$incl.cov)

n3 <- pof(setms = qca_data$fs_trade,
          outcome = qca_data$fs_unvotes,
          relation = "necessity")
n3 <- as.data.frame(n3$incl.cov)

n4 <- pof(setms = qca_data$fs_alliance,
          outcome = qca_data$fs_unvotes,
          relation = "necessity")
n4 <- as.data.frame(n4$incl.cov)

necessity <- rbind(n1, n2, n3, n4) %>%
  rename(Consistência = inclN) %>%
  rename(Relevância = RoN) %>%
  rename(Cobertura = covN) %>%
  print()
##             Consistência Relevância Cobertura
## fs_pviews      0.7382677  0.6234197 0.6670847
## fs_nviews      0.6066400  0.6658271 0.6205556
## fs_trade       0.3342466  0.9351489 0.7885090
## fs_alliance    0.3373280  0.8905522 0.6908328

Embora o índice de relevância de algumas variáveis seja elevado (ver Schneider e Wagemann, 2007), a consistência de todas elas fica muito abaixo do índice de 0.9 recomendável para uma variável causal ser considerada necessária para o resultado, de modo que elas podem ser descartadas enquanto variáveis necessárias.

Avançando para a análise de suficiência, essa é conduzida com base da tabela verdade, principal ferramenta analítica do QCA, realizada aqui através da função QCA::truthTable, onde:

  • outcome determina à variável dependente, no caso os padrões de voto na AGNU;
  • conditions se refere às variáveis independetes; e
  • incl.cut estabelece a consistência mínima para determinada configuração ser considerada positiva, adotando aqui o valor mínimo de 0.8 sugerido por Ragin (2008) como consistência padrão para condições suficientes em fuzzy sets.
row.names(qca_data) <- qca_data$DyadCode #identifica os casos por sua DyadCode, facilitando a visualização na tabela verdade.

truth_table <- truthTable(qca_data, outcome = "fs_unvotes", 
                          conditions = "fs_pviews, fs_nviews, fs_trade, 
                                        fs_alliance",
                          incl.cut = 0.8)

truth_table
## 
##   OUT: output value
##     n: number of cases in configuration
##  incl: sufficiency inclusion score
##   PRI: proportional reduction in inconsistency
## 
##      fs_pviews fs_nviews fs_trade fs_alliance   OUT    n   incl  PRI  
##  1       0         0        0          0         1     1   0.953 0.865
##  5       0         1        0          0         0     11  0.741 0.566
##  6       0         1        0          1         0     4   0.710 0.552
##  7       0         1        1          0         0     1   0.720 0.435
##  9       1         0        0          0         1     10  0.803 0.665
## 10       1         0        0          1         1     4   0.862 0.794
## 11       1         0        1          0         1     1   0.931 0.870
## 12       1         0        1          1         1     4   0.954 0.928
## 13       1         1        0          0         0     5   0.718 0.473
## 14       1         1        0          1         1     1   0.841 0.646
## 15       1         1        1          0         1     1   0.865 0.758
## 16       1         1        1          1         0     1   0.753 0.543

A partir da tabela verdade criada, é possível gerar um diagrama de Venn apresentando os resultados de todas as possíveis combinações das variáveis causais.

venn(truth_table, ellipse = TRUE, ilabels = TRUE)

Através da função QCA::minimize podemos reduzir a complexidade da solução e apresentar os caminhos de suficiência causal, nos quais a combinação da presença das variáveis independentes são suficientes para a produção da variável dependente.

minimize(truth_table, include = "?", details = TRUE)
## 
## M1: ~fs_nviews + fs_pviews*~fs_trade*fs_alliance +
##     fs_pviews*fs_trade*~fs_alliance -> fs_unvotes
## 
##                                     inclS   PRI   covS   covU  
## -------------------------------------------------------------- 
## 1                       ~fs_nviews  0.830  0.744  0.613  0.307 
## 2  fs_pviews*~fs_trade*fs_alliance  0.791  0.694  0.202  0.040 
## 3  fs_pviews*fs_trade*~fs_alliance  0.885  0.814  0.219  0.036 
## -------------------------------------------------------------- 
##                                 M1  0.804  0.714  0.692

5 Conclusão

Três soluções causais emergem como suficientes para a produção do resultado, sendo:

  • A ausência de um índice elevado de opiniões negativas entre os Estados;

  • A presença de um índice elevado de opiniões positivas entre os Estados acompanhada de uma aliança militar e da ausência de uma interdependencia econômica; e

  • A presença de um índice elevado de opiniões positivas entre os Estados acompanhada de uma interdependencia econômica e da ausência de uma aliança militar entre as partes.

Notavelmente, os três casos incluem variáveis associadas ao soft power indireto, seja através da ausência de uma repulsa entre as populações desses Estados (solução 1) ou da presença de atração entre essas populações acompanhada de alguma outra variável causal (soluções 2 e 3), reforçando a importância do fenômeno para a compreensão das relações entre os Estados.

6 Referências

Bailey, M. A., Strezhnev, A. and Voeten, E. (2009) ‘United Nations General Assembly Voting Data’, Harvard Database, 18. doi: https://doi.org/10.7910/DVN/LEJUQZ.

BBC and GlobeScan (2017) Sharp Drop in World Views of US, UK: Global Poll. Available at: https://globescan.com/sharp-drop-in-world-views-of-us-uk-global-poll/#backgrounder-country-by-country-results (Accessed: 22 October 2022).

Duşa, A. (2019) QCA with R - A Comprehensive Resource. New York: Springer.

Gibler, D. M. (2009) ‘International military alliances, 1648-2008’, Congressional Quarterly Press, (v4.1).

Nye, J. (2004) Soft Power: The Means to Sucess in World Politics. Cambridge: Public Affairs.

United Nations (2022) UN Comtrade Database. Available at: https://comtrade.un.org/data/ (Accessed: 22 October 2022).